package cn.wlh.learn.webmagic.pipeline;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Task;
import us.codecraft.webmagic.pipeline.Pipeline;

import java.util.Collection;
import java.util.Map;

/**
 * 类型转化组件。 <br/>
 * 把对应的内容转化成对应的类型。 <br/>
 * 应用场景: <br/>
 *      保证数据类型安全。 如 db数据类型。。。。 <br/>
 */
public class ClassConvertPipeline implements Pipeline {
    private final static Log logger = LogFactory.get();
    private final Map<String,Class> convertMap;

    /**
     * 类型转化组件。
     */
    public ClassConvertPipeline() {
        this(MapUtil.empty());
    }

    /**
     * 类型转化组件。
     * @param convertMap
     */
    public ClassConvertPipeline(Map<String, Class> convertMap) {
        this.convertMap = convertMap;
    }

    @Override
    public void process(ResultItems resultItems, Task task) {
        Map<String, Object> all = resultItems.getAll();
        for (Map.Entry<String, Object> entry : all.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
            // 获得要转化的类
            Class toClass = this.convertMap.getOrDefault(key, String.class);
            // 转化
            Object convertAfter = Convert.convert(toClass, value);
            //
            resultItems.put(key,convertAfter);
        }
    }


    public Map<String, Class> getConvertMap() {
        return convertMap;
    }
}